package com.c2b.algorithm.leetcode.base;

/**
 * <a href='https://leetcode.cn/problems/maximum-strong-pair-xor-i/'>找出强数对的最大异或值 I(Maximum Strong Pair XOR I)</a>
 * <p>
 * 给你一个下标从 0 开始的整数数组 nums 。如果一对整数 x 和 y 满足以下条件，则称其为 强数对 ：
 *     <ul>
 *         <li>|x - y| <= min(x, y)</li>
 *     </ul>
 * </p>
 * <p>你需要从 nums 中选出两个整数，且满足：这两个整数可以形成一个强数对，并且它们的按位异或（XOR）值是在该数组所有强数对中的 最大值 。</p>
 * <p>返回数组 nums 所有可能的强数对中的 最大 异或值。</p>
 * <p>注意，你可以选择同一个整数两次来形成一个强数对。</p>
 *
 * <p>
 * <b>示例</b>
 * <pre>
 * 示例 1：
 *      输入：nums = [1,2,3,4,5]
 *      输出：7
 *      解释：数组 nums 中有 11 个强数对：(1, 1), (1, 2), (2, 2), (2, 3), (2, 4), (3, 3), (3, 4), (3, 5), (4, 4), (4, 5) 和 (5, 5) 。
 *      这些强数对中的最大异或值是 3 XOR 4 = 7 。
 *
 * 示例 2：
 *      输入：nums = [10,100]
 *      输出：0
 *      解释：数组 nums 中有 2 个强数对：(10, 10) 和 (100, 100) 。
 *      这些强数对中的最大异或值是 10 XOR 10 = 0 ，数对 (100, 100) 的异或值也是 100 XOR 100 = 0 。
 *
 * 示例 3：
 *      输入：nums = [5,6,25,30]
 *      输出：7
 *      解释：数组 nums 中有 6 个强数对：(5, 5), (5, 6), (6, 6), (25, 25), (25, 30) 和 (30, 30) 。
 *      这些强数对中的最大异或值是 25 XOR 30 = 7 ；另一个异或值非零的数对是 (5, 6) ，其异或值是 5 XOR 6 = 3 。
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 *  <ul>
 *      <li>1 <= nums.length <= 50</li>
 *      <li>1 <= nums[i] <= 100</li>
 *  </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/1/23 9:41
 */
public class LC2932MaximumStrongPairXOR_I_S {

    static class Solution {
        public int maximumStrongPairXor(int[] nums) {
            int res = 0;
            for (int i = 0; i < nums.length; i++) {
                for (int j = i; j < nums.length; j++) {
                    if (Math.abs(nums[j] - nums[i]) <= Math.min(nums[i], nums[j])) {
                        // 强数对
                        res = Math.max(res, nums[i] ^ nums[j]);
                    }
                }
            }
            return res;
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.maximumStrongPairXor(new int[]{1, 2, 3, 4, 5}));
        System.out.println(solution.maximumStrongPairXor(new int[]{10, 100}));
        System.out.println(solution.maximumStrongPairXor(new int[]{5,6,25,30}));
    }
}
